Note. Boxplots display the interquartile range (IQR, center box), and the whiskers extend 1.5*IQR from the lower and upper hinge. The white point indicates the mean and the white center line indicates the median.
# workers
# initial data cleaning was done in SPSS (syntax files are available in "")
dtWorker <- list(
raw.pre = read_spss("data/S1_Workers/processed/cleaned/MT - Pre-Measure - 06-15-2018.sav"),
raw.post = read_spss("data/S1_Workers/processed/cleaned/MT - Post-Measure - 06-15-2018.sav"),
raw.morning = read_spss("data/S1_Workers/processed/cleaned/MT - Morning - 06-15-2018.sav"),
raw.afternoon = read_spss("data/S1_Workers/processed/cleaned/MT - Afternoon - 06-15-2018.sav")
)
# students
dtStudents <- list(
raw.pre = read.csv(file = "data/S2_Students/raw/AOTS_Pre.csv", header = T, sep = ","),
raw.post = read.csv(file = "data/S2_Students/raw/AOTS_Post.csv", header = T, sep = ","),
raw.daily = read.csv(file = "data/S2_Students/raw/AOTS_Daily.csv", header = T, sep = ",")
)
# young medical professionals
dtMedical <- list(
raw.pre = c(),
raw.post = c(),
raw.daily = c()
)
# important names for Morning and Afternoon
names.m <- c(
"StartDate",
"EndDate",
"Finished",
"Duration__in_seconds_",
"RecordedDate",
"ExternalReference",
"Meta_Operating_System",
"Contact_dum",
"number",
"time",
"duration_1",
"dyad.group",
"gr_size",
"gr_type_1",
"gr_type_2",
"gr_type_3",
"gr_type_4",
"gr_type_5",
"gr_type_6",
"gr_type_7",
"gr_type_8",
"gr_type_9",
"gr_type_10",
"gr_type_11",
"gr_type_12",
"gr_type_13",
"gr_type_14",
"gr_type_15",
"gr_type_16",
"gr_type_17_TEXT",
"gr_context_1",
"gr_context_2",
"gr_context_3",
"gr_context_4",
"gr_context_5",
"gr_context_6",
"gr_context_7",
"gr_context_8",
"gr_context_9",
"gr_context_10",
"gr_context_11",
"gr_context_12",
"gr_context_13_TEXT",
"gr_context_14_TEXT",
"gr_dutchness",
"dyad_type_1",
"dyad_type_2",
"dyad_type_3",
"dyad_type_4",
"dyad_type_5",
"dyad_type_6",
"dyad_type_7",
"dyad_type_8",
"dyad_type_9",
"dyad_type_10",
"dyad_type_11",
"dyad_type_12",
"dyad_type_13",
"dyad_type_14",
"dyad_type_15",
"dyad_type_16",
"dyad_type_17_TEXT",
"Context_1",
"Context_2",
"Context_3",
"Context_4",
"Context_5",
"Context_6",
"Context_7",
"Context_8",
"Context_9",
"Context_10",
"Context_11",
"Context_12",
"Context_13_TEXT",
"Context_14_TEXT",
"keyMotive",
"keymotive_fulfillemt_1",
"keyMotive_Dutch_1",
"autonomy_1",
"competence_1",
"relatedness_self_1",
"relatedness_other_1",
"qualityAccidental_1",
"qualityVoluntary_1",
"qualityCooperative_1",
"qualityDutchy_1",
"quality_overall_1",
"quality_meaning_1",
"quality_star_1",
"wantInt",
"desire_type_1",
"desire_type_2",
"desire_type_3",
"desire_type_4",
"desire_type_5",
"desire_type_6",
"desire_type_7",
"desire_type_8",
"desire_type_9",
"desire_type_10",
"desire_type_11",
"desire_type_12",
"desire_type_13",
"desire_type_14",
"desire_type_15",
"desire_type_16",
"desire_type_17_TEXT",
"desire_context_1",
"desire_context_2",
"desire_context_3",
"desire_context_4",
"desire_context_5",
"desire_context_6",
"desire_context_7",
"desire_context_8",
"desire_context_9",
"desire_context_10",
"desire_context_11",
"desire_context_12",
"desire_context_13_TEXT",
"desire_context_14_TEXT",
"Reason_nodesire",
"keyMotive_noInt",
"keyMotive_noInt_fulf_1",
"autonomy_NoInt_1",
"competence_NoInt_1",
"relatedness_1_NoInt_1",
"thermometerDutch_1",
"thermometerDutchInt_2",
"ExWB_1",
"alertness1",
"calmness1",
"valence1",
"alertness2",
"calmness2",
"valence2",
"inNonDutch",
"NonDutchNum",
"NonDutchType_1",
"NonDutchType_2",
"NonDutchType_3",
"NonDutchType_4",
"NonDutchType_5",
"NonDutchType_6",
"NonDutchType_7",
"NonDutchType_8",
"NonDutchType_9",
"NonDutchType_10",
"NonDutchType_11",
"NonDutchType_12",
"NonDutchType_13",
"NonDutchType_14",
"NonDutchType_15_TEXT",
"date",
"time.0",
"LocationLatitude",
"LocationLongitude"
)
names.a <- c(names.m, "keyInteraction_1", "keyInteractionTime")
# Create reduced data sets for morning and afternoon
dat.mo <- dtWorker$raw.morning[, names.m]
dat.mo$daytime <- "morning"
dat.af <- dtWorker$raw.afternoon[, names.a]
dat.af$daytime <- "afternoon"
# merge morning and afternoon measurements with indicator [+ clean up]
daily.dat <- rbind.fill(dat.mo, dat.af)
daily.dat <- daily.dat[daily.dat$ExternalReference != 55951, ]
dtWorker$daily <- daily.dat
rm(dat.mo, dat.af, names.m, names.a, daily.dat)
# names for pre-measurement
names.pre <- c(
"Finished",
"age",
"Gender",
"Living",
"roommate_1",
"roommate_2",
"roommate_3",
"nationality",
"SecondNationality",
"timeNL_1",
"Reason_2",
"Reason_5",
"Reason_7",
"Reason_8_TEXT",
"DutchLang",
"occupation_1",
"occupation_2",
"occupation_3",
"occupation_4",
"occupation_7",
"CurrentEducation_1",
"education_level",
"EduLang_2",
"RUG_faculty",
"Study.0",
"association",
"DutchMeetNum",
"DutchFriends_1",
"assimilation",
"separation",
"integration",
"marginalization",
"VIA_heritage",
"VIA_Dutch",
"SSAS_surrounding",
"SSAS_privat",
"SSAS_public",
"autonomy",
"relatedness",
"competence",
"anxiety",
"swl",
"alertness",
"calmness",
"valence",
"date",
"time",
"City",
"ZIP",
"id"
)
# reduced data set for pre measurement
dat.pre.red <- dtWorker$raw.pre[, names.pre]
# merge with daily data [+ clean up]
df.pre <- merge(
x = dtWorker$daily,
y = dat.pre.red,
by.x = "ExternalReference",
by.y = "id",
all = T
)
rm(names.pre)
# adjust duplicate names to fit to indicate daily or pre measurement
names(df.pre) <- gsub("[[:punct:]]x", ".daily", names(df.pre))
names(df.pre) <- gsub("[[:punct:]]y", ".pre", names(df.pre))
# names for post measurement
names.post <- c(
"ExternalReference",
"assimilation",
"separation",
"integration",
"marginalization",
"VIA_heritage",
"VIA_Dutch",
"anxiety",
"swl",
"rosenberg",
"social_support",
"stress",
"discrimination",
"discrimination_month",
"NLE_1month",
"NLE_6month",
"NLE_12month"
)
# reduced data set for post-measurement
dat.post.red <- dtWorker$raw.post[, names.post]
# merge post measurement with pre- and daily data
df <- merge(
x = df.pre,
y = dat.post.red,
by.x = "ExternalReference",
by.y = "ExternalReference",
all = T
)
# adjust duplicate names to indicate pre or post
names(df) <- gsub("[[:punct:]]x", ".pre", names(df))
names(df) <- gsub("[[:punct:]]y", ".post", names(df))
# add to list
dtWorker$combined <- df
# create data frame with cleaned data
df <- dtWorker$combined %>%
filter(Finished.pre == 1,
Finished.daily == 1,
!is.na(ExternalReference))
# add running number as measurement ID within participants
df$measureID = rowidv(df, cols = c("ExternalReference"))
df <- df %>%
mutate(
PID = as.numeric(factor(ExternalReference)), # participant ID
TID = measureID-1, # time ID with t0 = 0 for meaningfull intercept interpretations
date = substr(StartDate,1,10), # awkward way of extracting date (best converted to )
time = substr(StartDate,12,19), # awkward way of extracting time
daynum = as.numeric(factor(date)), # all days as numeric for ordering
daycor = ifelse(daytime=="morning" & period_to_seconds(hms(time))<period_to_seconds(hms("12:00:00")) | daytime=="afternoon" & period_to_seconds(hms(time))<period_to_seconds(hms("19:00:00")),daynum-1,daynum), # correctly identify which date the questionnaire is about
daycor.lead = sprintf("%02d", daycor),
daytime.lt = ifelse(daytime=="morning","a","b"), # morning / afternoon to a / b
day_time = paste(daycor.lead, daytime.lt, sep="_"), # combine day id with morning / afternoon
session = as.numeric(factor(day_time)), # day and time identifier as numeric id
SubTime = chron::times(time.0),
time.daily = as.character(time.daily),
PPDate = as.Date(df$date.daily),
number = replace_na(number, 0),
NonDutchNum = replace_na(NonDutchNum, 0)
)
dtWorker$clean <- df
# clean up
rm(df.pre, names.post, dat.post.red, dat.pre.red, df)
# Export reduced Data
#write.csv(dtWorker$clean, "data/processed/MT_clean-merged_07-05-2018.csv", row.names = F)
#save(dtWorker$clean, file = "data/processed/MT_clean-merged_07-05-2018.RData")
# our own test IDs
ownIDs <- c(
"beautifulLionfishXXXR5rcgVBzGu8hPvOqrK8UBJBw4owvi9nfRFSFu3lMzYhE",
"niceDogoXXXmB8JI5SFu78SF3DVof84mGUPPNUr14p2HYFTtp31a6D1OwAzM6F-K",
"amusedQuailXXXmhuc_fpTp8vPkMwDH1BzjaH1d1kHSO1bsPEfsnaEYk4WeVBfPi",
"juwGAbtXX0_1kmZtSVqKh3PGaHOICqUyU4iBkrT3nDsI_uifuD1gzKcZerxaM5FL"
)
# Prepare dfs for Cleaning
df.pre <- dtStudents$raw.pre %>%
mutate_all(na_if,"") %>%
mutate_all(na_if,"NA") %>%
filter(!is.na(ended)) %>% # remove all who did not finish
filter(!e_mail %in% .$e_mail[duplicated(.$e_mail)]) %>% # remove all who did the pre questionnaire multiple times (b/c inconsistent ratings scales)
filter(!session %in% ownIDs) %>% # remove our own test
mutate(session = as.character(session)) # turn factor into character strings (probably just precaution)
df.post <- dtStudents$raw.post %>%
mutate_all(na_if,"") %>%
mutate_all(na_if,"NA") %>%
filter(!is.na(session)) %>% # remove own test runs
filter(!session %in% ownIDs) %>% # remove our own test
filter(session %in% df.pre$session) %>% # remove anyone who wasn't in the pre
filter(!is.na(ended)) %>% # remove all who never finished
filter(!session %in% .$session[duplicated(.$session)]) %>% # remove all duplicate sessions
mutate(session = as.character(session)) # turn factor into character strings (probably just precaution)
df.daily <- dtStudents$raw.daily %>%
mutate_all(na_if,"") %>%
mutate_all(na_if,"NA") %>%
filter(!session %in% ownIDs) %>% # remove our own test
filter(session %in% df.pre$session) %>% # remove anyone who wasn't in the pre
filter(!is.na(ended)) %>% # remove all who never finished
mutate(session = as.character(session)) # turn factor into character strings (probably just precaution)
# merge daily with pre
dfPreDaily = merge(
x = df.daily,
y = df.pre,
by = "session",
suffixes = c(".daily", ".pre"),
all = F
)
# merge daily with post
dfCombined = merge(
x = dfPreDaily,
y = df.post,
by = "session",
suffixes = c(".pre", ".post"),
all = F
)
# add to list
dtStudents$clean <- dfCombined
# clean up workspace
rm(df.pre, df.daily, df.post, dfPreDaily, dfCombined, ownIDs)
#TBD
df <- dtWorker$clean
# Time and Date Variables
# remove seconds from afternoon time
df$SubTime[df$daytime == "afternoon"] = paste0(substring(as.character(df$time.0[df$daytime == "afternoon"]),4,8),":00")
df$time.daily[df$daytime == "afternoon" & !is.na(df$time.daily!="<NA>")] = paste0(substring(as.character(df$time.daily[df$daytime == "afternoon" & !is.na(df$time.daily!="<NA>")]),4,8),":00")
# Correct morning / afternoon date where survey was collected the day after to indicate the correct date that was targeted
df$PPDate[df$SubTime < "11:50:00" & df$daytime == "morning"] = df$PPDate[df$SubTime < "11:50:00" & df$daytime == "morning"]-1
df$PPDate[df$SubTime < "18:50:00" & df$daytime == "afternoon"] = df$PPDate[df$SubTime < "18:50:00" & df$daytime == "afternoon"]-1
# Mood scales
df$calmness.daily = rowSums(df[, c("calmness1", "calmness2")], na.rm = T)
df$alertness.daily = rowSums(df[, c("alertness1", "alertness2")], na.rm =T)
df$valence.daily = rowSums(df[, c("valence1", "valence2")], na.rm = T)
# Need scales
df$keyMotiveFulfilled = rowSums(df[,c("keymotive_fulfillemt_1","keyMotive_noInt_fulf_1")], na.rm=T)
df$autonomy.daily.all = rowSums(df[,c("autonomy_1","autonomy_NoInt_1")], na.rm=T)
df$competence.daily.all = rowSums(df[,c("competence_1","competence_NoInt_1")], na.rm=T)
#cor(df$relatedness_other_1, df$relatedness_self_1,use="complete.obs")
df$relatedness.daily.all = rowMeans(df[,c("relatedness_other_1","relatedness_self_1","relatedness_1_NoInt_1")], na.rm=T)
df$relatedness.daily.int = rowMeans(df[,c("relatedness_other_1","relatedness_self_1")], na.rm=T)
# summarize by participant (check that everything is within pp might not be the case for )
between <- df %>%
group_by(ExternalReference) %>%
mutate(
CtContactNL = sum(Contact_dum),
CtContactNonNl = sum(inNonDutch),
CtContactNLAll = sum(number),
CtContactNonNlAll = sum(NonDutchNum),
AvKeyNeed = mean(keyMotiveFulfilled, na.rm=T),
AvKeyNeedInt = mean(keymotive_fulfillemt_1, na.rm=T),
AvKeyNeedNoInt = mean(keyMotive_noInt_fulf_1, na.rm=T),
AvAutonomy = mean(autonomy.daily.all, na.rm=T),
AvCompetence = mean(competence.daily.all, na.rm=T),
AvRelatedness = mean(relatedness.daily.all, na.rm=T),
AvThermo = mean(thermometerDutch_1, na.rm=T),
AvWB = mean(ExWB_1, na.rm=T)) %>%
ungroup() %>%
mutate(
CtContactNL_c = scale(CtContactNL, scale = FALSE),
AvKeyNeedInt_c = scale(AvKeyNeedInt, scale = FALSE),
AvKeyNeed_c = scale(AvKeyNeed, scale = FALSE),
CtContactNL_z = scale(CtContactNL, scale = TRUE),
AvKeyNeedInt_z = scale(AvKeyNeedInt, scale = TRUE),
AvKeyNeed_z = scale(AvKeyNeed, scale = TRUE)
)
warning("some variable transformations (esp. _c and _z) might be across all participants (i.e., not within PP).")
dtWorker$full <- between
rm(df, between)
#save(df.btw, file = "data/processed/df.btw.RData")
#write_sav(df.btw, "data/processed/MT_clean-merged_pre-post.sav")
# export data to Mplus
# df.mplus = remove_all_labels(select(df, PID, session, thermometerDutch_1, inNonDutch, Contact_dum, keyMotiveFulfilled, autonomy.daily.all, competence.daily.all, relatedness.daily.all))
# names(df.mplus)= c("PID", "session", "att", "intin", "intout", "keymot", "aut", "comp", "rel")
# mplus = df.mplus[order(df.mplus$PID, df.mplus$session),]
# mplus.intcont = mplus[mplus$intout==1,]
# prepareMplusData(mplus.intcont, "data/processed/dynamic-subset-intonly.dat")
df <- dtStudents$clean
# Add ID variables
df$PID = as.numeric(factor(df$session)) # participant ID
# order time
df$TID <- factor(df$date_period, levels = unique(dtStudents$raw.daily$date_period))
df$TIDnum <- as.numeric(df$TID) #get numeric TID
# check whether time ordering worked
df <- df %>%
arrange(PID, TID) #%>%
#View()
# Interaction as Factor
df$interaction.f <- factor(df$Interaction, levels = c("no interaction", "Dutch", "Non-Dutch"))
df$intNL <- ifelse(df$Interaction=="Dutch",1,0)
df$intNonNL<- ifelse(df$Interaction=="Non-Dutch",1,0)
# -------------------------------------------------------------------------------------------------------------
# Combine Variables
# -------------------------------------------------------------------------------------------------------------
# Relatedness
pairs.panels.new(df[c("RelatednessSelf","RelatednessOther")],
labels = c("I shared information about myself.", "X shared information about themselves."))
df$RelatednessInteraction <- rowMeans(df[c("RelatednessSelf","RelatednessOther")], na.rm=T)
df$RelatednessInteraction[df$RelatednessInteraction == "NaN"] <- NA
# Relatedness Overall (JANNIS NOT SURE THESE ARE CORRECT, CHANGE ROWS?; J: Changed "NaN" in df$RelatednessInteraction to NA() should work now)
df$Relatedness <- rowMeans(df[,c("RelatednessInteraction", "RelatednessNoInteraction")], na.rm=T)
# Pro-Sociality
df$ProSo <- rowMeans(df[,c("ProSo1", "ProSo2", "ProSo3", "ProSo4")], na.rm=T)
# Anti-Sociality
df$AntiSo <- rowMeans(df[,c("AntiSo1", "AntiSo2", "AntiSo3", "AntiSo4")], na.rm=T)
# -------------------------------------------------------------------------------------------------------------
# Add Variables related to interaction partner
# -------------------------------------------------------------------------------------------------------------
# create function for later lapply
createIntPartDf <- function(inp) {
# prepare the dataframe so that we can forloop over it later
tmp <- data.frame(CC = as.character(inp$CC),
NewCC = as.character(inp$NewCC),
NewName = as.character(inp$NewName),
NewCloseness = inp$NewCloseness,
NewGender = inp$NewGender,
NewEthnicity = as.character(inp$NewEthnicity),
NewRelationship = as.character(inp$NewRelationship))
tmp$CC2 <- recode(tmp$CC, 'SOMEONE ELSE' = "NA")
tmp$CC2 <- ifelse(tmp$CC == 1 | tmp$CC == "SOMEONE ELSE", as.character(tmp$NewName), as.character(tmp$CC2))
# maybe add [[:space:]]\b to remove space before word boundary or ^[[:space:]] to remove space in the beginning of a string
tmp$CC2 <- gsub("^[[:space:]]", "", tmp$CC2)
tmp$NewName <- gsub("^[[:space:]]", "", tmp$NewName)
# open the variables that will be filled up in the foor-loop
tmp$closeness <- rep(NA, nrow(tmp))
tmp$gender <- rep(NA, nrow(tmp))
tmp$ethnicity <- rep(NA, nrow(tmp))
tmp$relationship <- rep(NA, nrow(tmp))
# Run the for-loop. It finds the variables related to the name of the interaction partner. If there is a repeating interaction
# partner (i.e. CC2) it takes the value (i.e. NewCloseness) from the first interaction (i.e. NewName)
for (i in 1:nrow(tmp)) {
if (is.na(tmp$CC2[i])) {
next
} else {
tmp$closeness[i] <- na.omit(tmp$NewCloseness[as.character(tmp$CC2[i]) == as.character(tmp$NewName)])[1] #find closeness where CC2 matches NewName (na.omit + [1] to get the number)
tmp$gender[i] <- na.omit(tmp$NewGender[as.character(tmp$CC2[i]) == as.character(tmp$NewName)])[1] #(na.omit + [1] to get the number and not the rest of the na.omit list)
tmp$ethnicity[i] <- na.omit(as.character(tmp$NewEthnicity[as.character(tmp$CC2[i]) == as.character(tmp$NewName)]))[1] #PROBLEM IS THAT THERE ARE TOO MANY NA's: Difficult to deal with
tmp$relationship[i] <- na.omit(as.character(tmp$NewRelationship[as.character(tmp$CC2[i]) == as.character(tmp$NewName)]))[1]
}
}
out <- tmp
out
}
# split df per participants and run function
PP <- split(df, df$PID)
PP <- lapply(PP, createIntPartDf); rm(createIntPartDf)
# add variables back to df
remergePP <- do.call(rbind.data.frame, PP)
colnames(remergePP) <- paste(colnames(remergePP), "_Calc", sep = "")
df <- cbind(df, remergePP);rm(remergePP)
writeLines("Test whether newly calculate df and old df have the same order:")
## Test whether newly calculate df and old df have the same order:
print(table(as.character(df$CC_Calc) == as.character(df$CC)))
##
## TRUE
## 3270
writeLines("If we also add the NAs we get the exact number:")
## If we also add the NAs we get the exact number:
print(sum(is.na(df$CC_Calc))+table(as.character(df$CC_Calc) == as.character(df$CC)))
##
## TRUE
## 4965
# -------------------------------------------------------------------------------------------------------------
# Center Relevant Variables
# -------------------------------------------------------------------------------------------------------------
df <- df %>%
group_by(PID) %>%
mutate(
KeyNeedFullfillment.cm = mean(KeyNeedFullfillment, na.rm = TRUE), # cluster mean (mean of PP)
KeyNeedFullfillment.cwc = KeyNeedFullfillment - KeyNeedFullfillment.cm, # cluster mean centered (within PP centered)
closeness.cm = mean(closeness_Calc, na.rm = TRUE),
closeness.cwc = closeness_Calc - closeness.cm
) %>%
ungroup()
# store
dtStudents$full = df
The full session information with all relevant system information and all loaded and installed packages is available in the collapsible section below.
| Setting | Value |
|---|---|
| version | R version 4.1.1 (2021-08-10) |
| os | macOS Big Sur 10.16 |
| system | x86_64, darwin17.0 |
| ui | X11 |
| language | (EN) |
| collate | en_US.UTF-8 |
| ctype | en_US.UTF-8 |
| tz | Europe/Berlin |
| date | 2021-10-10 |
| Package | Loaded version | Date | Source |
|---|---|---|---|
| bookdown | 0.23 | 2021-08-13 | CRAN (R 4.1.1) |
| data.table | 1.14.0 | 2021-02-21 | CRAN (R 4.1.0) |
| devtools | 2.4.2 | 2021-06-07 | CRAN (R 4.1.0) |
| dplyr | 1.0.7 | 2021-06-18 | CRAN (R 4.1.0) |
| ellipse | 0.4.2 | 2020-05-27 | CRAN (R 4.1.0) |
| Formula | 1.2-4 | 2020-10-16 | CRAN (R 4.1.0) |
| ggplot2 | 3.3.5 | 2021-06-25 | CRAN (R 4.1.0) |
| ggthemes | 4.2.4 | 2021-01-20 | CRAN (R 4.1.0) |
| gridExtra | 2.3 | 2017-09-09 | CRAN (R 4.1.0) |
| haven | 2.4.3 | 2021-08-04 | CRAN (R 4.1.0) |
| Hmisc | 4.5-0 | 2021-02-28 | CRAN (R 4.1.0) |
| kableExtra | 1.3.4 | 2021-02-20 | CRAN (R 4.1.0) |
| knitr | 1.36 | 2021-09-29 | CRAN (R 4.1.0) |
| lattice | 0.20-44 | 2021-05-02 | CRAN (R 4.1.1) |
| lubridate | 1.7.10 | 2021-02-26 | CRAN (R 4.1.0) |
| mada | 0.5.10 | 2020-05-25 | CRAN (R 4.1.0) |
| mvmeta | 1.0.3 | 2019-12-10 | CRAN (R 4.1.0) |
| mvtnorm | 1.1-2 | 2021-06-07 | CRAN (R 4.1.0) |
| pander | 0.6.4 | 2021-06-13 | CRAN (R 4.1.0) |
| plotly | 4.9.4.9000 | 2021-08-28 | Github (ropensci/plotly@a938bf5) |
| plyr | 1.8.6 | 2020-03-03 | CRAN (R 4.1.0) |
| psych | 2.1.6 | 2021-06-18 | CRAN (R 4.1.0) |
| RColorBrewer | 1.1-2 | 2014-12-07 | CRAN (R 4.1.0) |
| remedy | 0.1.0 | 2018-12-03 | CRAN (R 4.1.0) |
| reshape2 | 1.4.4 | 2020-04-09 | CRAN (R 4.1.0) |
| rmarkdown | 2.11 | 2021-09-14 | CRAN (R 4.1.1) |
| sessioninfo | 1.1.1 | 2018-11-05 | CRAN (R 4.1.0) |
| stringi | 1.7.5 | 2021-10-04 | CRAN (R 4.1.1) |
| stringr | 1.4.0 | 2019-02-10 | CRAN (R 4.1.0) |
| survival | 3.2-12 | 2021-08-13 | CRAN (R 4.1.1) |
| tibble | 3.1.5 | 2021-09-30 | CRAN (R 4.1.0) |
| tidyr | 1.1.4 | 2021-09-27 | CRAN (R 4.1.0) |
| usethis | 2.0.1 | 2021-02-10 | CRAN (R 4.1.0) |
R version 4.1.1 (2021-08-10)
Platform: x86_64-apple-darwin17.0 (64-bit)
locale: en_US.UTF-8||en_US.UTF-8||en_US.UTF-8||C||en_US.UTF-8||en_US.UTF-8
attached base packages:
other attached packages:
loaded via a namespace (and not attached):